package users

import (
	"ginstudy/app/global/consts"
	"ginstudy/app/http/controller/web"
	data_transfer "ginstudy/app/http/validator/core/data_transfer"
	"ginstudy/app/utils/response"

	"github.com/gin-gonic/gin"
)

type Login struct {
	// 表单参数验证结构体支持匿名结构体嵌套
	BaseField
}

// 验证器语法，参见 Register.go文件，有详细说明

func (l Login) CheckParams(context *gin.Context) {

	// 1.基本的验证规则没有通过
	if err := context.ShouldBind(&l); err != nil {
		errs := gin.H{
			"tips": "UserLogin参数校验失败，参数不符合规定, user_name、pass、 长度有问题，不允许登录",
			"err":  err.Error(),
		}
		response.ErrorParam(context, errs)
		return
	}

	// 该函数主要是将本结构体的字段（成员）按照 consts.ValidatorPrefix + json 标签对应的键 => 值 形式绑定在上下文，便于下一步（控制器）可以直接通过 context.Get(键) 获取相关值
	extraAddBindDataContext := data_transfer.DataAddContext(l, consts.ValidatorPrefix, context)
	if extraAddBindDataContext == nil {
		response.ErrorSystem(context, "userLogin表单验证器json化失败", "")
	} else {
		// 验证完成，调用控制器，并将验证器成员（字段）递给控制器，保持上下文数据一致
		(&web.Users{}).Login(extraAddBindDataContext)
	}
}
